package com.itheima.d3_buffer;

import java.io.BufferedInputStream;
import java.io.FileInputStream;

//目标：掌握字节缓冲输入流读取数据
public class Demo01 {
    public static void main(String[] args) throws Exception {
        /**
         * BufferedInputStream(InputStream is)：
         *      可以把低级的字节输入流包装成一个高级的缓冲字节输入流管道，从而提高字节输入流读数据的性能
         *
         * 需求：使用字节缓冲输入流将resource文件夹下的a.txt文件中内容读取到控制台打印
         */
        //1.创建缓冲字节输入流对象，提供基础的字节输入流对象（FileInputStream），定位要读取的文件
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("day09-io\\resources\\a.txt"));

        //2.开始读取，读取功能依然是read
        //int data = bis.read();
        //System.out.println((char) data);

        //一次读取一个字节数组，效率更高
        byte[] bys = new byte[1024];
        int len;

        /**
         * 循环读取，条件：读取到的字节个数len不等于-1，就继续
         *
         * 底层读取流程：
         *      一次性从磁盘中读了8kb个字节数据，放到了缓冲流内部的缓冲数组中（磁盘到内存，次数影响效率）
         *      然后从缓冲数组中拿了len个到bys数组中！（内存到内存，次数不太影响效率）
         */
        while ((len = bis.read(bys)) != -1) {
            String str = new String(bys, 0, len);
            System.out.println(str);
        }

        //3.释放资源
        bis.close();
    }
}
